package com.test.booksystem.controller;


import com.test.booksystem.constant.Constants;
import com.test.booksystem.model.*;
import com.test.booksystem.service.BookService;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;


// 用户从这里拿取数据
@Slf4j
@RestController
@RequestMapping("/book")
public class BookController {
    @Autowired
    private BookService bookService;

    /**
     * 添加图书功能
     */
    @RequestMapping("/addBook")
    public String addBook(BookInfo bookInfo) {
        // 打印日志，方便定位问题
        log.info("所接收的图书各参数：{}", bookInfo);
        // 1.校验图书各参数
        if (!StringUtils.hasLength(bookInfo.getBookName())
                || !StringUtils.hasLength(bookInfo.getAuthor())
                || bookInfo.getCount() == null
                || bookInfo.getPrice() == null
                || !StringUtils.hasLength(bookInfo.getPublish())
                || bookInfo.getStatus() == null
        ) {
            return "输入的图书信息不正确！";
        }
        // 2.添加图书
        // 添加图书由于参数的不正确可能会报错，使用try-catch
        try {
            Integer row = bookService.addBook(bookInfo);
            if (row > 0) {
                return "";
            }
        } catch (Exception e) {
            // 图书各参数可能会对不上，会报错，打印日志
            log.error("添加图书错误：", e);
        }
        return "添加失败";
    }

    /**
     * 查询图书列表功能
     */
    @RequestMapping("/getBookList")
    public Result<PageResult<BookInfo>> getBookInfoByPage(PageRequest pageRequest, HttpSession session) {
        log.info("所查询的图书列表: {}", pageRequest);
        // 从 session 中获取用户信息
        // 如果找不到或对应不上，则说明用户未登录
        // 从 cookie 中获取 session_id，根据 session_id 拿取用户信息
        // 这一整个操作Spring 的HttpSession 已经帮我们完成了
        UserInfo userInfo = (UserInfo)session.getAttribute(Constants.USER_INFO);
        if (userInfo == null || userInfo.getId() <= 0) {
            return Result.fail();
        }
        // 处于登录状态
        PageResult<BookInfo> bookList = bookService.getBookInfoByPage(pageRequest);
        return Result.success(bookList);
    }

    /**
     * 根据 id 查询图书
     */
    @RequestMapping("/queryBookById")
    public BookInfo queryBookById(Integer bookId) {
        log.info("图书信息：" + bookId);
        return bookService.queryBookById(bookId);
    }

    /**
     * 更新图书
     */
    @RequestMapping("/updateBook")
    public String updateBook(BookInfo bookInfo) {
        log.info("要修改的图书信息：" + bookInfo);
        try {
            Integer row = bookService.updateBook(bookInfo);
            if (row > 0) {
                // 影响行数大于0，说明更新成功
                return "";
            }
        } catch (Exception e) {
            return "更新图书失败！";
        }
        return "更新图书失败！";
    }

    /**
     * 删除图书
     */
    @RequestMapping("/deleteBook")
    public String deleteBook(Integer bookId) {
        try {
            Integer row = bookService.deleteBook(bookId);
            if (row > 0) {
                // 影响行数大于0，说明更新成功
                return "";
            }
        } catch (Exception e) {
            return "更新图书失败！";
        }
        return "更新图书失败！";
    }

    /**
     * 批量删除
     */
    @RequestMapping("/batchDelete")
    public String batchDelete(@RequestParam List<Integer> ids) {
        log.info("图书信息:{}", ids);
        try {
            Integer rows = bookService.batchDeleteByIds(ids);
            if (rows > 0) {
                return "";
            }
        }catch (Exception e) {
            return "删除失败！";
        }
        return "删除失败！";
    }
}
